home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / DJLSR111.ZIP / libsrc / c / dos / dir.c < prev    next >
C/C++ Source or Header  |  1992-10-28  |  1KB  |  75 lines

  1. #include <string.h>
  2. #include <dir.h>
  3. #include <dirent.h>
  4.  
  5. DIR *opendir(char *name)
  6. {
  7.   int length;
  8.   DIR *dir = (DIR *)malloc(sizeof(DIR));
  9.   dir->num_read = 0;
  10.   dir->name = (char *)malloc(strlen(name)+6);
  11.   strcpy(dir->name, name);
  12.  
  13.   /* Append a "." if we got only the device name */
  14.   if (dir->name[1] == ':' && strlen(dir->name) == 2)
  15.       strcat(dir->name, ".");
  16.  
  17.   /* Strip trailing slashes, so we can append "/*.*" */
  18.   while (1)
  19.   {
  20.       length = strlen(dir->name);
  21.       if (length == 0) break;
  22.       if (dir->name[length - 1] == '/' ||
  23.       dir->name[length - 1] == '\\')
  24.       dir->name[length - 1] = '\0';
  25.       else
  26.       break;
  27.   }
  28.  
  29.   strcat(dir->name, "/*.*");
  30.   return dir;
  31. }
  32.  
  33. struct dirent *readdir(DIR *dir)
  34. {
  35.   int done;
  36.   if (dir->num_read)
  37.     done = findnext(&dir->ff);
  38.   else
  39.     done = findfirst(dir->name, &dir->ff,
  40.              FA_ARCH|FA_RDONLY|FA_DIREC|FA_HIDDEN|FA_SYSTEM);
  41.   if (done)
  42.     return 0;
  43.   dir->num_read ++;
  44.   dir->de.d_namlen = strlen(dir->ff.ff_name);
  45.   strcpy(dir->de.d_name,dir->ff.ff_name);
  46.   strlwr(dir->de.d_name);
  47.   return &dir->de;
  48. }
  49.  
  50. long telldir(DIR *dir)
  51. {
  52.   return dir->num_read;
  53. }
  54.  
  55. void seekdir(DIR *dir, long loc)
  56. {
  57.   int i;
  58.   rewinddir(dir);
  59.   for (i=0; i<loc; i++)
  60.     readdir(dir);
  61. }
  62.  
  63. void rewinddir(DIR *dir)
  64. {
  65.   dir->num_read = 0;
  66. }
  67.  
  68. int closedir(DIR *dir)
  69. {
  70.   free(dir->name);
  71.   free(dir);
  72.   return 0;
  73. }
  74.  
  75.